package com.scala.business

import org.apache.spark.sql.{Dataset, Row, SparkSession}
import org.apache.spark.sql.functions.{col, desc, when}

/**
 * 3、不同年龄段的会员等级分布
 * 按照年龄段（如10岁一个档次）进行统计，了解不同年龄段的客户量。这将帮助航空公司理解主要客户的年龄范围。
 * */
object Take03 {
  def main(args: Array[String]): Unit = {
    //创建SparkSession对象
    val ss: SparkSession = SparkSession.builder.appName("age distribution").master("local").getOrCreate
    // 调用spark Session的对象得到一个DataFrameReader对象
    val df: Dataset[Row] = ss.read.json("hdfs://master:9000/air_data/*")

    // 添加年龄段字段
    val distribution: Dataset[Row] = df.where("age is not null")
      .withColumn("年龄段", when(col("age").between(0, 17), "青少年(0-17)")
        .when(col("age").between(18, 30), "青年(18-30)")
        .when(col("age").between(31, 50), "中年(31-50)")
        .when(col("age").gt(50), "老年(大于50)"))


    distribution.groupBy("年龄段", "ffpTier")
      .count
      .orderBy(desc("年龄段"), desc("count"))
      .show()
  }
}
